#include <atcoder/all>
#include <bits/stdc++.h>
#define fi first
#define se second
#define DB double
#define U unsigned
#define P std::pair
#define LL long long
#define LD long double
#define pb emplace_back
#define pf emplace_front
#define MP std::make_pair
#define SZ(x) ((int)x.size())
#define all(x) x.begin(), x.end()
#define CLR(i, a) memset(i, a, sizeof(i))
#define FOR(i, a, b) for (int i = a; i <= b; ++i)
#define ROF(i, a, b) for (int i = a; i >= b; --i)
#define DEBUG(x) std::cerr << #x << '=' << x << std::endl

const int mod = 998244353;
const int MAXN = 1e5 + 5;
using atcoder::convolution;

int qpow(int a, int n = mod - 2) {
  int res = 1;
  while (n) {
    if (n & 1)
      res = 1ll * res * a % mod;
    a = 1ll * a * a % mod;
    n >>= 1;
  }
  return res;
}

int fac[MAXN], inv[MAXN];
int g[MAXN];

void prework() {
  fac[0] = 1;
  FOR(i, 1, MAXN - 1) fac[i] = 1ll * fac[i - 1] * i % mod;
  inv[MAXN - 1] = qpow(fac[MAXN - 1]);
  ROF(i, MAXN - 2, 0) inv[i] = 1ll * inv[i + 1] * (i + 1) % mod;
}

int main() {
  prework();
  int n, p;
  scanf("%d%d", &n, &p);
  p = 1ll * p * qpow(100) % mod;
  int q = (mod + 1 - p) % mod;

  g[n] = 1;
  ROF(t, n - 1, 1)
  g[t] = 1ll * g[t + 1] * (1 + 1ll * q * inv[t] % mod * fac[t - 1] % mod) % mod;

  std::vector<int> a(n + 1), b(n + 1);
  a[0] = a[1] = 0;
  FOR(l, 2, n) a[l] = 1ll * fac[l - 2] * g[l] % mod;

  int tmp = 1;
  FOR(l, 0, n) {
    b[n - l] = 1ll * tmp * inv[l] % mod;
    tmp = 1ll * tmp * q % mod;
  }

  auto res = convolution(a, b);
  printf("%d\n", g[1]);

  tmp = p;
  FOR(x, 2, n) {
    printf("%lld\n", 1ll * tmp * inv[x - 2] % mod * res[n + x] % mod);
    tmp = 1ll * tmp * p % mod;
  }
  return 0;
}
